package com.site.common.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * RsionLock
 * 基于 Redisson 的分布式锁
 */
@Inherited
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RedissonLock {

    /**
     * 分布式锁的key值,非空。支持el表达式获取入参对象参数
     */
    String  key();

    /**
     * 分布式锁key前缀，默认采用类全限定名:方法名
     */
    String  prefix() default "";

    /**
     * key与前缀的分隔符
     */
    String  separator() default ":";

    /**
     * 等待获取锁的时间
     */
    long  waitTime() default 8;

    /**
     * 持锁时间，超时后自动释放
     */
    long  leaseTime() default 3;

    /**
     * 时间单位
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * 是否公平锁，默认false
     * @return
     */
    boolean fairLock() default false;
}
